#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
	int *p = malloc(sizeof(int));
	*p = 100;
	// 创建子进程
	pid_t son = fork();
	if(son > 0) // 父进程
	{
		printf("*p=%d\n", *p); // 100
		*p = 200;
		printf("p=%d\n", *p); // 200
		printf("我是父进程\n");
		printf("当前的pid=%d\n", getpid());
		printf("当前的父进程的pid=%d\n", getppid());
		sleep(5);
		printf("延时结束g_c=%d\n", *p);
		int status;
		wait(&status);
		wait(NULL);
		// 判断子进程是否为正常退出
		if(WIFEXITED(status))
		{
			printf("当前子进程是正常退出\n");
			printf("子进程的退出值=%d\n", WEXITSTATUS(status));
		}
		
	}
	else if(son == 0) // 子进程
	{
		sleep(2); // 保证父进程中，能够将变量修改
		printf("局部变量=%d\n", *p); // 100,子进程中打印的数据，并没有受到父进程中修改的影响
		*p = 300;
		printf("子进程中，修改完成*p=%d\n", *p);
		printf("我是子进程\n");
		printf("当前的pid=%d\n", getpid());
		printf("当前的父进程的pid=%d\n", getppid());
		exit(15);
	}
	
	return 0;
}
